package cn.junki.sparkbigmodeldemo.entity.request;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.List;

/**
 * 星火大模型对话接口请求封装
 *
 * @author Junki
 * @date 2023-09-21 14:24:19
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class SparkBigModelChatRequest {

    private Header header;

    private Parameter parameter;

    private Payload payload;

    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    @Builder
    public static class Header {
        private String app_id; // 应用的app_id，需要在开放平台申请
        private String uid; // 每个用户的id，非必传字段，用于后续扩展
    }

    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    @Builder
    public static class Parameter {
        private Chat chat;
    }

    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    @Builder
    public static class Chat {
        private String domain; // 需要使用的领域。通用模型：generalv2，其他领域具体值联系接口提供方。
        private Double temperature; // 核采样阈值,向上调整可以增加结果的随机程度	取值范围 (0，1]  默认0.5
        private Integer top_k; // 从k个中随机选择一个(非等概率)	最小值1，最大值6。  默认4
        private Integer max_tokens; // 回答的tokens的最大长度	最小值是1, 最大值是4096。    默认2048
    }

    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    @Builder
    public static class Payload {
        private Message message;
    }

    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    @Builder
    public static class Message {
        private List<Text> text;
    }

    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    @Builder
    public static class Text {
        private String role; // 角色  user表示是用户的问题，assistant表示AI的回复
        private String content; // 文本内容
    }

}
